home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 3 / Gold Medal Software - Volume 3 (Gold Medal) (1994).iso / prog / pbc23c.arj / EXTFSPEC.BAS < prev    next >
BASIC Source File  |  1994-03-13  |  6KB  |  167 lines

  1. '   +----------------------------------------------------------------------+
  2. '   |                                                                      |
  3. '   |        PBClone  Copyright (c) 1990-1994  Thomas G. Hanlin III        |
  4. '   |                                                                      |
  5. '   +----------------------------------------------------------------------+
  6.  
  7.    DECLARE FUNCTION GetDrive$ ()
  8.    DECLARE FUNCTION GetSub2$ (Drive$)
  9.    DECLARE FUNCTION SubExist2% (SubDir$)
  10.    DECLARE SUB SetDrv (Drive$)
  11.  
  12. SUB ExtendFSpec (OFile$, OExt$, FullFile$, ErrCode%)
  13.    File$ = UCASE$(OFile$)
  14.    Ext$ = UCASE$(OExt$)
  15.    FullFile$ = ""
  16.    ErrCode% = 0
  17.  
  18.    IF LEN(File$) = 0 THEN ErrCode% = -1
  19.  
  20.    IF LEFT$(Ext$, 1) = "." THEN
  21.       Ext$ = MID$(Ext$, 2, 3)
  22.    ELSE
  23.       Ext$ = LEFT$(Ext$, 3)
  24.    END IF
  25.  
  26. ' ----- Junk Screen ---------------------------------------------------------
  27. ' Here we check for characters that can't legally be part of a file name.
  28. ' Note that we pass most graphics characters and even spaces through, since
  29. ' they are legal (although not usually advised).  If a Unix-style forward
  30. ' slash is found, it's converted into a DOS-style backslash.
  31.  
  32.    FOR tmp% = 1 TO LEN(File$)
  33.       ch$ = MID$(File$, tmp%, 1)
  34.       ch% = ASC(ch$)
  35.       IF ch% < 32 OR ch% = 127 THEN
  36.          ErrCode% = -1
  37.       ELSEIF INSTR("+,;<=>[]|", ch$) > 0 OR ch% = 34 THEN
  38.          ErrCode% = -1
  39.       ELSEIF ch$ = "/" THEN
  40.          ch$ = "\"
  41.       END IF
  42.       MID$(File$, tmp%, 1) = ch$
  43.    NEXT
  44.  
  45.    IF ErrCode% < 0 THEN EXIT SUB
  46.  
  47. ' ----- Get Drive -----------------------------------------------------------
  48. ' Here we get the drive specification.  If they gave us one, we check it to
  49. ' see if it seems reasonable.  Otherwise, we get the default drive.
  50.  
  51.    tmp% = INSTR(File$, ":")
  52.    IF tmp% = 0 THEN
  53.       Drive$ = GetDrive$
  54.    ELSEIF tmp% = 2 THEN
  55.       Drive$ = LEFT$(File$, 1)
  56.       File$ = MID$(File$, 3)
  57.       tmp$ = GetDrive$
  58.       IF tmp$ <> Drive$ THEN
  59.          SetDrv Drive$
  60.          IF Drive$ <> GetDrive$ THEN ErrCode% = 1
  61.          SetDrv tmp$
  62.       END IF
  63.    ELSE
  64.       ErrCode% = -1
  65.    END IF
  66.    IF INSTR(File$, ":") THEN ErrCode% = -1
  67.    FullFile$ = Drive$ + ":\"
  68.  
  69.    IF ErrCode% < 0 THEN EXIT SUB
  70.  
  71. ' ----- Absolute Path -------------------------------------------------------
  72. ' If they gave us a relative path, we need to fill it out, so we get the
  73. ' default subdirectory on the specified drive.
  74.  
  75.    IF LEFT$(File$, 1) = "\" THEN
  76.       File$ = MID$(File$, 2)
  77.    ELSEIF ErrCode% = 0 THEN
  78.       tmp$ = MID$(GetSub2$(Drive$), 2)
  79.       IF LEN(tmp$) THEN FullFile$ = FullFile$ + tmp$ + "\"
  80.    END IF
  81.  
  82. ' ----- Path Check ----------------------------------------------------------
  83. ' Here we do the final validity checking on the subdirectory specification.
  84. ' While we're at it, we trim each part of the subdirectory to its maximum
  85. ' length (8 characters, plus an optional 3-character extension).  Shorthand
  86. ' descriptions (like "..") are also processed here.
  87.  
  88.    DO
  89.       IF File$ = "." OR File$ = ".." THEN
  90.          File$ = File$ + "\"
  91.       END IF
  92.       tmp% = INSTR(File$, "\")
  93.       IF tmp% = 1 THEN
  94.          ErrCode% = -1
  95.       ELSEIF tmp% THEN
  96.          tmp$ = LEFT$(File$, tmp% - 1)
  97.          File$ = MID$(File$, tmp% + 1)
  98.          IF tmp$ = ".." THEN
  99.             IF LEN(FullFile$) > 3 THEN
  100.                DO
  101.                   FullFile$ = LEFT$(FullFile$, LEN(FullFile$) - 1)
  102.                LOOP UNTIL RIGHT$(FullFile$, 1) = "\"
  103.             ELSE
  104.                ErrCode% = -1
  105.             END IF
  106.          ELSEIF tmp$ <> "." THEN
  107.             t% = INSTR(tmp$, ".")
  108.             IF t% THEN
  109.                tmp1$ = LEFT$(LEFT$(tmp$, t% - 1), 8)
  110.                tmp$ = MID$(tmp$, t% + 1, 3)
  111.                IF INSTR(tmp1$, ".") THEN ErrCode% = -1
  112.                FullFile$ = FullFile$ + tmp1$ + "." + tmp$ + "\"
  113.             ELSE
  114.                FullFile$ = FullFile$ + LEFT$(tmp$, 8) + "\"
  115.             END IF
  116.          END IF
  117.       END IF
  118.    LOOP WHILE tmp% > 0 AND ErrCode% = 0
  119.  
  120.    IF ErrCode% < 0 THEN EXIT SUB
  121.  
  122. ' ----- Fix Last and Decide -------------------------------------------------
  123. ' All we have left is a final piece, which might be either a file name or a
  124. ' subdirectory with an assumed "\*.*".  First we trim it, then we try to
  125. ' figure out whether it's a file or subdirectory.  If we got an invalid drive
  126. ' earlier, there's no way to tell the difference, so we'll assume it's a
  127. ' file name.
  128.  
  129.    t% = INSTR(File$, ".")
  130.    IF t% THEN
  131.       tmp1$ = LEFT$(LEFT$(File$, t% - 1), 8)
  132.       tmp$ = MID$(File$, t% + 1, 3)
  133.       IF INSTR(tmp1$, ".") OR INSTR(tmp$, ".") THEN
  134.          ErrCode% = -1
  135.       END IF
  136.       File$ = tmp1$ + "." + tmp$
  137.    ELSE
  138.       File$ = LEFT$(File$, 8)
  139.    END IF
  140.  
  141.    IF LEN(File$) THEN
  142.       IF ErrCode% THEN
  143.          FullFile$ = FullFile$ + File$
  144.          IF t% = 0 THEN FullFile$ = FullFile$ + "." + Ext$
  145.       ELSE
  146.          IF SubExist2%(FullFile$ + File$) THEN
  147.             FullFile$ = FullFile$ + File$ + "\*.*"
  148.          ELSE
  149.             IF LEN(FullFile$) > 3 THEN
  150.                IF SubExist2%(LEFT$(FullFile$, LEN(FullFile$) - 1)) = 0 THEN
  151.                   ErrCode% = 2
  152.                END IF
  153.             END IF
  154.             FullFile$ = FullFile$ + File$
  155.             IF t% = 0 THEN FullFile$ = FullFile$ + "." + Ext$
  156.          END IF
  157.       END IF
  158.    ELSE
  159.       IF LEN(FullFile$) > 3 THEN
  160.          IF SubExist2%(LEFT$(FullFile$, LEN(FullFile$) - 1)) = 0 THEN
  161.             ErrCode% = 2
  162.          END IF
  163.       END IF
  164.       FullFile$ = FullFile$ + "*.*"
  165.    END IF
  166. END SUB
  167.